package org.xbs.demo1.pojo;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class JwtUtils {
    //令牌内密钥
    private static final String SECRET = "eGJzeGJzeGJzc2hpeGlhb3ppdGF6dWloYW9kZWZhdGhlcg==";
    //令牌过期时间（设置为12小时）
    private static final long EXPIRATION = 12*60*60*1000;
    //生成令牌
    public static String generatejws(LoginBackParam loginBackParam){
        //创建Map集合，并用实体类HashMap实现
        Map<String,Object> claims = new HashMap<>();
        //为claims添加字段
        claims.put("username",loginBackParam.getUsername());
        claims.put("password",loginBackParam.getPassword());
        return Jwts.builder()
                .subject(String.valueOf(loginBackParam.getId()))//String.valueOf(loginBackParam.getId())这是String提供的方法用于将任意类型数据转换成String
                .expiration(new Date(System.currentTimeMillis()+EXPIRATION))
                .claims(claims)
                .signWith(SignatureAlgorithm.HS256,SECRET)
                .compact();//返回了一个符合jwt规则的令牌
    }
    //解析令牌（获得载荷），主要是为了获得自定义部分，但是自定义部分不好直接获取，只能先获得这个载荷
    public static Claims parseJWTClaims(String token){
        return Jwts.parser()
                .setSigningKey(SECRET)
                .build()
                .parseSignedClaims(token)
                .getBody();
    }
    //解析令牌获得主题（id）
    public static Integer parseJWTSubject(String token){
        return Integer.parseInt(Jwts.parser()
                .setSigningKey(SECRET)
                .build()
                .parseSignedClaims(token)
                .getPayload()
                .getSubject());
    }

}

